#ifndef __CONFIG_SINGLETON__
#define __CONFIG_SINGLETON__

#include <memory>
#include <string>
#include <unordered_map>

#include "file/ini_reader.hpp"
#include "macro/common_macro.h"
#include "macro/declare_singleton.h"

namespace config {

class _Config {
    DECLARE_SINGLETON(_Config)

  private:
    std::unordered_map<std::string, IniReader> data_;

  public:
    void AddConfig(std::string name, std::string dir) {
        auto ini = IniReader(dir);
        data_.insert_or_assign(name, ini);
    }

    auto Data() -> std::unordered_map<std::string, IniReader>& {
        return data_;
    }
};

} // namespace config

#define Config config::_Config::GetInstance()
#define ConfigGet(name) config::_Config::GetInstance().Data().at(name)

#endif // __CONFIG_SINGLETON__